অ্যাপাচি আইভি (Apache Ivy) একটি ওপেন সোর্স ডিপেনডেন্সি ম্যানেজমেন্ট টুল, যা Java প্রোজেক্টে ব্যবহৃত লাইব্রেরি এবং ডিপেনডেন্সি রেজলভেশনকে সহজ করে তোলে। আইভি কনফিগারেশন এবং ডিপেনডেন্সি ডিফাইন করার মাধ্যমে আপনি আপনার প্রোজেক্টের জন্য প্রয়োজনীয় লাইব্রেরি বা ডিপেনডেন্সি নির্ধারণ করতে পারেন, যা প্রোজেক্টের বিল্ড প্রক্রিয়া স্বয়ংক্রিয়ভাবে পরিচালনা করবে।
এখানে আমরা আইভির Configuration এবং Dependency কিভাবে ডিফাইন করতে হয় তা আলোচনা করব।
আইভিতে Configuration ডিপেনডেন্সির নির্দিষ্ট সেটকে প্রতিনিধিত্ব করে, যা আলাদা আলাদা কনফিগারেশন বা পরিবেশের জন্য প্রযোজ্য হতে পারে। কনফিগারেশন ডিফাইন করার মাধ্যমে আপনি নির্দিষ্ট ডিপেনডেন্সি গ্রুপ বা লাইব্রেরি একটি নির্দিষ্ট কনফিগারেশনে অন্তর্ভুক্ত করতে পারেন।
আইভি সাধারণত দুই ধরনের কনফিগারেশন ডিফাইন করতে ব্যবহার হয়:
compile
: এটি সেই লাইব্রেরিগুলো ধারণ করে যেগুলি কম্পাইলেশন প্রক্রিয়ার সময় প্রয়োজন।runtime
: এটি সেই লাইব্রেরিগুলো ধারণ করে যেগুলি প্রোগ্রাম চালানোর সময় প্রয়োজন।<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<configurations>
<conf name="compile" description="Dependencies for compiling the code"/>
<conf name="runtime" description="Dependencies for runtime"/>
</configurations>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10" conf="compile"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.30" conf="runtime"/>
</dependencies>
</ivy-module>
এখানে:
compile
কনফিগারেশনটি কম্পাইলিংয়ের জন্য commons-lang3
লাইব্রেরি অন্তর্ভুক্ত করেছে।runtime
কনফিগারেশনটি slf4j-api
লাইব্রেরি অন্তর্ভুক্ত করেছে যা রuntime এ প্রয়োজন।এইভাবে, আপনি আপনার প্রোজেক্টে বিভিন্ন কনফিগারেশনে আলাদা আলাদা ডিপেনডেন্সি ব্যবহার করতে পারেন।
আইভি ব্যবহারের মূল কাজ হলো ডিপেনডেন্সি রেজলভেশন। Dependency হল সেই লাইব্রেরি বা প্যাকেজ যা আপনার প্রোজেক্টে কাজ করার জন্য প্রয়োজন। আইভিতে, আপনি ডিপেনডেন্সি ডিফাইন করার মাধ্যমে অন্য লাইব্রেরি বা ফাইলগুলো আপনার প্রোজেক্টে যুক্ত করতে পারেন।
ডিপেনডেন্সি ডিফাইন করতে সাধারণত তিনটি প্রধান উপাদান ব্যবহৃত হয়:
org
: লাইব্রেরির অর্গানাইজেশন বা গ্রুপ।name
: লাইব্রেরির নাম।rev
: লাইব্রেরির সংস্করণ।<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.slf4j" name="slf4j-api" rev="1.7.30"/>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরির 3.10
সংস্করণ এবং slf4j-api
লাইব্রেরির 1.7.30
সংস্করণ ডিপেনডেন্সি হিসেবে ব্যবহার করা হয়েছে।এইভাবে, আপনি আপনার প্রোজেক্টের জন্য যে ডিপেনডেন্সি বা লাইব্রেরি প্রয়োজন, তা ডিফাইন করতে পারেন।
আইভিতে আপনি একাধিক ডিপেনডেন্সি একসাথে ডিফাইন করতে পারেন, এবং প্রয়োজনে কিছু নির্দিষ্ট ডিপেনডেন্সি বাদ (exclude) দিতে পারেন।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.apache.commons" name="commons-logging" rev="1.2">
<exclude org="org.slf4j" name="slf4j-api"/>
</dependency>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
এবং commons-logging
লাইব্রেরি দুটি ডিপেনডেন্সি হিসেবে ব্যবহার করা হয়েছে।commons-logging
লাইব্রেরি থেকে slf4j-api
এক্সক্লুড করা হয়েছে, যাতে এটি ডিপেনডেন্সি গ্রাফে অন্তর্ভুক্ত না হয়।আইভি আপনার ডিপেনডেন্সি গ্রাফে থাকা ট্রান্সিটিভ ডিপেনডেন্সি (অর্থাৎ ডিপেনডেন্সির ডিপেনডেন্সি) রেজলভ করতেও সক্ষম। আপনি যদি একটি লাইব্রেরি ব্যবহার করেন যা অন্য লাইব্রেরির উপর নির্ভরশীল, তবে আইভি সেই লাইব্রেরিগুলোও ডাউনলোড করবে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="3.10"/>
<dependency org="org.springframework" name="spring-core" rev="5.3.8"/>
</dependencies>
</ivy-module>
এখানে, spring-core
লাইব্রেরির মধ্যে থাকা অন্যান্য ডিপেনডেন্সি (যেমন spring-beans
, spring-context
ইত্যাদি) স্বয়ংক্রিয়ভাবে রেজলভ হবে।
আইভি রেঞ্জ নির্ধারণ করার মাধ্যমে আপনি কোনো ডিপেনডেন্সির একটি নির্দিষ্ট রেঞ্জ (যেমন 3.x থেকে 4.x) নির্বাচন করতে পারেন। এটি লাইব্রেরির সংস্করণ চয়েসে নমনীয়তা প্রদান করে।
<ivy-module version="2.0">
<info organisation="com.example" module="my-project" revision="1.0.0"/>
<dependencies>
<dependency org="org.apache.commons" name="commons-lang3" rev="[3.0,4.0)"/>
</dependencies>
</ivy-module>
এখানে:
commons-lang3
লাইব্রেরির সংস্করণ 3.0 থেকে 4.0 এর মধ্যে কোনো সংস্করণ ব্যবহৃত হবে, তবে 4.0 ইনক্লুড হবে না।অ্যাপাচি আইভি (Apache Ivy) একটি শক্তিশালী ডিপেনডেন্সি ম্যানেজমেন্ট টুল যা আপনার প্রোজেক্টে লাইব্রেরি এবং ডিপেনডেন্সি রেজলভেশন এবং কনফিগারেশন সহজ করে তোলে। আপনি Configuration এবং Dependency ডিফাইন করে আপনার প্রোজেক্টে প্রয়োজনীয় লাইব্রেরি ও তাদের সংস্করণ নির্ধারণ করতে পারেন। এর মাধ্যমে আপনার প্রোজেক্টের ডিপেনডেন্সি গ্রাফ উন্নত এবং ম্যানেজ করা সহজ হয়ে যায়।
common.read_more